2. Arquitectura (1)
Definición, estilos y evaluación:
Primer nivel de descomposición, que muestra como se organiza el sistema en términos de sus componentes y las interacciones entre ellos.
Cambiar la Arquitectura de un producto ya construido en general exige mucho esfuerzo
=> Evaluación de Arquitecturas
Distintos estilos que definen familias de sistemas en términos de patrones de organización estructural.
Un estilo de arquitectura implica sus componentes, conectores y exigencias al combinarlos.
Identificarlos y caracterizarlos para facilitar la comunicación entre diseñadores
2. Arquitectura (2)
Influencia y características:
Sus características condicionan las características del producto final (escalabilidad, capacidad, desempeño, consistencia, mantenibilidad, compatibilidad, etc.)
Estilo y estructura particular elegidos pueden depender de Requerimientos No Funcionales:
1 – Desempeño: localizar operaciones críticas en un número reducido de subsistemas con poca comunicación. Componentes de grano grueso.
2 – Seguridad: estructurar en capas con los recursos más críticos protegidos por las capas más internas con alto nivel de validación.
3 – Mantenibilidad: componentes autocontenidos que puedan ser intercambiados con facilidad, evitando estructuras de datos compartidas. Componentes de grano fino.
CONFLICTO DE INTERESES: entre los requerimientos 1 y 3, si se tienen ambos se deberá buscar una solución intermedia.
2. Arquitectura (3)
Elementos para la documentación:
SAD (Software Architecture Description) salida del proceso de diseño de arquitectura, donde se incluyen modelos gráficos que muestran perspectivas distintas del sistema y descripciones textuales.
Documentarla para que pueda ser utilizada y mantenida por otros, con suficiente detalle, sin ambiguedades ni repeticiones, registrando decisiones tomadas.
Notaciones: UML general, accesible.
ADLs formales, para expertos.
Complejidad se maneja documentando diferentes vistas de la arq., proyección en una dimensión mostrada desde una perspectiva, sin tener en cuenta entidades no relevantes a esa perspectiva.
The 4+1 View Model of Software Architecture Kruchten95
Vistas definidas: lógica, procesos, implementación, física y CU. Todas son guiadas por los CU (o escenarios) significativos a la arquitectura
Beneficios esperados de prestarle atención:
Mejorar la comunicación entre los distintos interesados:
Cliente diseñadores
Diseñadores desarrolladores
Clarificar intenciones de diseño
la arquitectura concebida a menudo se pierde, comunicación en gral. informal (difícil)
Proporcionar bases para análisis del diseño
predecir desempeño y otras características y ajustar el diseño como tarea rutinaria
Mejorar el mantenimiento
gran parte del esfuerzo de mantenimiento se dedica a entender
Identificar cuestiones interesantes
incluso careciendo de métodos formales
2. Arquitectura (4)
Métodos para evaluación de arquitecturas:
Analizar la arquitectura para ver si cumple requisitos de calidad establecidos (ej. confiabilidad, interoperabilidad)
Preferible realizar evaluaciones tempranas que permitan introducir cambios con menor impacto y mejorar los aspectos de riesgo identificados
Evaluaciones a posteriori resultan útiles como forma de aprendizaje y estudio de posibilidades de mejora, por ej. para una nueva versión del producto
Software Engineering Institute (SEI) propone:
Architecture Tradeoff Analysis Method (ATAM)
Software Architecture Analysis Method (SAAM)
2. Arquitectura (5)
Diseño: Arquitectura vs. Programas
(Gp:) Implementaciones de partes
(Gp:) Interacciones entre partes
(Gp:) Muestra
(Gp:) Copia de código o llamado a bibliotecas
(Gp:) Composición de subsistemas
(Gp:) Reutilización
(Gp:) Dentro de los límites de módulo
(Gp:) Fuera de los límites de módulo
(Gp:) Visión
(Gp:) Desempeño de algoritmos
(Gp:) Desempeño a nivel del Sistema
(Gp:) Evaluación
(Gp:) En general dinámico
(Gp:) En general estático
(Gp:) Análisis
(Gp:) Propiedades computacionales
(Gp:) Propiedades estructurales
(Gp:) Considera
(Gp:) Programas
(Gp:) Arquitectura
ArquitecturaEstilos (Garlan&Shaw, Sommerville,otros)
Flujo de Datos
Secuencial por lotes / Tubos y Filtros/ Circuitos de Control
Llamada y Retorno
Programa Principal y subrutinas / Orientada a Objetos
Componentes Independientes
Procesos que se comunican / Invocación implícita (Eventos)
Centrado en los Datos (repositorios)
Bases de Datos / Pizarrones (Blackboards)
Máquinas Virtuales
Intérpretes / Capas Jerárquicas
Específicas del Dominio de Aplicación
Modelos genéricos / Modelos de referencia
Distribuidas
Cliente-Servidor/ Objetos Dists. / Dist. Procesos, datos / SOAs
Heterogéneas y Otras
1 – Flujo de Datos
Caracterizadas por:
La disponibilidad de los datos controla la ejecución
La estructura del diseño está dominada por el movimiento ordenado de los datos de un componente a otro
El patrón del flujo de datos es explícito
En un sistema puro no hay otra interacción entre procesos
Ejemplos:
Secuencial por lotes (dominada por actualización de BD)
Tubos y Filtros – Filtros conectados en un grafo de flujo de datos
Circuitos de Control de Procesos
Tubos y Filtros (1)
Características:
Por los tubos fluyen datos, transmisión de salidas de un filtro a la entrada de otro
Cada filtro admite una o varias entradas (tubos) y una o varias salidas (tubos)
Cada filtro es independiente del resto y no conocen la identidad de los filtros antes y después de él
La transformación del filtro puede comenzar antes de terminar de leer la entrada (distinto al proceso por lotes)
Respetando el grafo, no importa la secuencia (paralelismo)
Ejemplo: pipelines (Unix)
Filtro
Tubo
Tubos y Filtros (2)
Bondades:
Fácil comprender el comportamiento total de entrada/salida del sistema a partir de los efectos de cada filtro
(entrada->transformación->salida)
Permite reutilización (simplicidad de interfaces, filtros reutilizables)
Fácil evolución y mantenimiento (agregar, sustituir, eliminar filtros)
Permite evaluar desempeño (independencia de filtros)
Permite ejecución en paralelo
Limitaciones:
Orientado a procesamiento por lotes (no interactivo)
Necesidad de consistencia entre flujos de datos
La independencia entre filtros puede acarrear la repetición de procesos de preparación (ineficiencias)
(ej. validaciones)
Circuitos de Control (de Procesos) (1)
Propósito:
Proveer control dinámico de un entorno físico. Ej. sist. acond. ambiental
Mantener propiedades específicas de las salidas del proceso dentro o cerca de valores de referencia indicados (puntos fijos o referencias)
Elementos a considerar:
Variables a monitorear, sensores a utilizar, su calibración, temporización tanto del sensado como del control.
Clasificación:
Bucle con retroalimentación (feedback loop)
Mide la variable controlada y ajusta el proceso para mantener el valor cerca o dentro de la referencia.
Bucle con prealimentación o anticipador (feedforward loop)
Mide otras variables del proceso que actúan como indicadores e intenta anticipar los futuros efectos sobre la variable controlada.
Circuitos de Control (de Procesos) (2)
Proceso
Controlador
variables de Entrada
Punto de
fijación
Variable
Controlada
Cambios en las
variables manipuladas
Bucle con retroalimentación (feedback loop):
Bucle anticipador (feedforward loop):
variables de Entrada
Punto de
fijación
Controlador
Cambios en las
variables manipuladas
Variable
Controlada
Proceso
Flujo de Control vs. Flujo de Datos
Flujo de Control:
La cuestión dominante es cómo se mueve el control a través del programa
los datos pueden acompañar el control pero no son dominantes
el razonamiento se refiere al orden de ejecución
Flujo de Datos:
La cuestión dominante es cómo los datos se mueven a través de un conjunto de procesos atómicos
a medida que se mueven los datos se activa el control
el razonamiento se refiere a la disponibilidad de los datos, su transformación, las demoras
2 – Llamada y retorno
Programa Principal y Subrutinas:
Descomposición Funcional tradicional
Orientada a Objetos (tipos abstractos de datos)
Ocultamiento de Información, especialmente de representaciones
Otros
Capas Jerárquicas
Sistemas Cliente/Servidor
Remote Procedure Call
Programa Principal y Subrutinas (1)
Características:
Descomposición jerárquica:
basada en la relación usa
Único Hilo de Control (Thread of Control)
soportado directamente por los lenguajes de programación
Estructura de subsistemas implícita
subrutinas agregadas en un módulo
Razonamiento jerárquico:
que una subrutina sea correcta depende de que sean correctas las subrutinas llamadas
Bondades:
Permite analizar los flujos de control y saber como responderá el sistema a cierto tipo de entradas
Limitaciones: Manejo de excepciones
Programa Principal y Subrutinas (2)
Principal
Subr. A
Subr.B
Subr.C
Subsistema
Llamado/Retorno
Orientada a Objetos (1)
Caracterizada por:
La solución está compuesta por un conjunto de agentes que interactúan
Representación de datos y operaciones asociadas se encapsulan en un objeto o TAD.
Herencia, Polimorfismo, Sobrecarga de operadores, enlace dinámico
Bondades:
Facilita el Mantenimiento (localización de impacto)
Promueve la reutilización de componentes
Permite cambiar la implementación de un objeto sin afectar al resto
Limitaciones:
Un objeto debe conocer las interfaces de aquellos que utiliza
Si se cambia una interfaz, se afectan todos los que la utilizan
Orientada a Objetos (2)
Llamado
Objeto
3 – Componentes Independientes
Procesos que se comunican
Pasan mensajes a los participantes conocidos
Sistemas guiados por eventos
Invocación implícita de participantes desconocidos
Otros
Envíos de mensajes múltiples con enlace dinámico
Procesos guiados por interrupciones
Controlador de interrupciones pasa el control a algún componente para su procesamiento
Procesos que se comunican (1)
Características:
Muestra al sistema como un conjunto de unidades ejecutando concurrentemente y sus interacciones.
Componentes: procesos independientes
típicamente implementados como tareas independientes
Conectados por: mensajes
punto a punto
asincrónicos y sincrónicos
RPC y otros protocolos se pueden construir encima
Ejemplos:
procesos que monitorean ejecución de otros procesos.
Procesos que se comunican (2)
Mensaje
Proceso
Invocación Implícita (guiada por eventos)
Caracterizada por:
Se registran procedimientos para los eventos
Un componente comunica un evento
Cuando se anuncia un evento los procedimientos asociados son invocados implícitamente
El orden de invocación es no determinista
Bondades:
Facilita la reutilización de componentes
Fácil cambiar los componentes que atienden un evento
Limitaciones:
No hay garantías respecto a qué va a pasar frente a un evento (quién responderá ni en que orden se dará la ejecución)
Limitaciones en la verificación (comprobar correctitud debido a dependencia del contexto y secuencia de eventos)
Ejemplos:
Depurador de programas que invoca uno u otro editor
4 – Centrados en los datos (repositorios)
Caracterizada por:
Hay un almacenamiento central de datos y un conjunto de componentes que operan sobre éste.
Bases de Datos transaccionales
gran almacén de datos central
orden de operación determinado por la entrada de datos
Pizarrón (blackboard)
representación central compartida adecuada a una aplicación
orden de operación determinado por estado actual de la estructura central
Otros
Herramientas CASE
Sistemas integrados de diseño
Pizarrón (Blackboard) (1)
Fuentes de Conocimiento
Procesos independientes que corresponden a particiones del conocimiento del mundo y del dominio dependientes de la aplicación
Responden a cambios en el pizarrón
Estructura de datos del Pizarrón
Estado completo de la solución del problema
Jerarquía de datos de estado para resolver el problema
único medio por el cual las Fuentes de conocimiento interactúan para llegar a la solución
Control
Guíado enteramente por el estado del pizarrón
Las Fuentes de conocimiento responden oportunamente cuando los cambios en el pizarrón aplican
Puede implementarse en las FC, en el pizarrón, en un componente separado o cualquier combinación de éstos.
Pizarrón (2)
Pizarrón
FC 1
FC 7
FC 6
FC 2
FC 3
FC 4
FC 5
Cálculos
Memoria (Compartida)
5 – Máquinas Virtuales
Intérpretes:
crean una máquina virtual cuando no se dispone de la que se desea
Capas Jerárquicas:
cada capa constituye una máquina virtual que provee servicios a las otras capas
Otros:
Sistemas basados en Reglas
tipo especial de intérpretes
procesadores de lenguaje de comandos
shells
Intérpretes (1)
Características:
procesador emulado por software
datos
representación del programa que se interpreta
estado del programa que se interpreta
estado interno del intérprete
El control reside en el ciclo de ejecución del intérprete
(Gp:) Datos
(estado del
programa)
(Gp:) Programa
siendo
interpretado
(Gp:) Estado
interno del
interprete
(Gp:) Motor de
interpretación
simulada
(Gp:) Memoria
(Gp:) entradas
(Gp:) salidas
(Gp:) Máquina de estado
de la ejecución
(Gp:) Instrucción seleccionada
(Gp:) Datos seleccionados
(Gp:) Acceso a datos
Recuperar/Almacenar
Intérpretes (2)
Capas Jerárquicas (1)
Caracterizada por:
Hay diversas capas, cada una provee un conjunto de servicios a las capas superiores y requiere servicios de las inferiores.
Modelo estricto: el acceso a servicios de otras capas está limitado, una capa sólo utiliza servicios de la inmediata inferior, y ofrece servicios a la inmediata superior. Sino Modelo relajado.
Definición de protocolos mediante los que interactúan las capas
Bondades:
Facilita la comprensión (basado en niveles de abstracción)
Facilita mantenimiento (posible modificar una capa sin afectar al resto)
Facilita reutilización
Facilita portabilidad
Limitaciones:
No siempre es fácil estructurar en capas ni identificar los niveles de abstracción a partir de los Requerimientos
Puede afectar el desempeño la coordinación entre los niveles
Capas Jerárquicas (2)
(Gp:) Usuarios
(Gp:) Criptografía
(Gp:) Interfaces de Archivos
(Gp:) Gestión de Claves
(Gp:) Autenticación
Ejemplo:
Capas de Sistema de Seguridad
6 Específicas del dominio de aplicación
Modelos específicos para un dominio de aplicación particular
Modelos genéricos:
Abstracciones de sistemas existentes que encapsulan las características principales de los mismos. A menudo representan la arq. común de una familia de aplicaciones (línea de productos).
Ejs. Módulos que se deben incluir en un compilador
Modelos de referencia:
Modelos abstractos idealizados derivados de un estudio del dominio de aplicación. Proveen información sobre la estructura general del sistema y actúan como estándar contra el cual evaluar sistemas.
Ejs. Modelo de capas OSI para sists. de comunicación
7 Distribuidas
Cliente-Servidor:
servicios provistos por los servidores y requeridos por los clientes
Objetos Distribuidos:
objetos brindan y requieren servicios de otros objetos
Service Oriented Architecture (SOA):
composición de servicios (ej. web-services)
Distribución de:
Datos (centralizados, distribuidos, replicados)
Procesos (fija, variable)
Comunicación:
Remote Procedure Call
Pasaje de mensajes
7 Distribuidas
Características:
El procesamiento de la info es distribuído sobre varias computadoras (procesadores) conectados por una red
se requiere cierto software de middleware para administrar las partes y asegurar comunicación e intercambio de datos
el middleware es un software de propósito gral. que por lo regular se vende comercialmente, y actúa como mediador entre las partes
categorías de middleware: monitor transaccional (TPM), remote procedure call (RPC), message oriented mid.(MOM), distributed object mid., database access mid.
Bondades:
Compartición de recursos, apertura, concurrencia, escalabilidad, tolerancia a fallas, transparencia.
Limitaciones:
complejidad, seguridad, difíciles de gestionar, poco predecibles
Cliente – Servidor
Caracterizada por:
hay un conjunto de servicios provistos por los servidores y un conjunto de clientes que requieren esos servicios.
Los clientes conocen a los servidores pero no a otros clientes y los servidores no tienen porque conocer a los clientes
tanto los clientes como los servidores son procesos lógicos
la asignación de procesos a procesadores no tiene porqué ser 1:1
Ejemplo:
Ci = clientes
Si = servidores
Cliente – Servidor en 2 niveles
Organización más simple de la distribución C/S, un conjunto de clientes y un servidor (o varios servidores idénticos):
CLIENTE FINO:
el procesamiento de la aplicación y manejo de los datos se hace en el servidor. El software en el cliente implementa solo la presentación
Gran carga de procesamiento tanto en el servidor como en la red
CLIENTE GRUESO:
el servidor solo es responsable por el manejo de los datos. El software en el cliente implementa la lógica de la aplicación y las interacciones con el usuario.
Administración del sistema más compleja (actualizaciones)
Los applets descargables de Java permiten:
Parte del software de procesamiento de la aplicación se descarga en el cliente como applets de Java, la interfaz de usuario se construye utilizando un navegador Web que los ejecuta
3 niveles:
Los procesos lógicos que tienen que ver con la presentación, lógica de aplicación y administración de datos pueden ser distribuídos en 3 sistemas de cómputo distintos.
N niveles:
Se amplía la de 3 niveles agregando niveles según se requiera. Ej. aplicación que necesita acceder y utilizar datos de distintas fuentes (integración)
Bondades:
Respecto a C/S en 2 niveles: son más escalables, se reduce el tráfico en la red (respecto a cliente fino), facilita la actualización del procesamiento de la aplicación (respecto a cliente grueso)
Cliente Servidor en 3 y más niveles
Objetos distribuidos
Características:
No hay distinción entre clientes y servidores
Cada elemento distribuido es un objeto que provee servicios a otros objetos y requiere servicios de otros objetos.
Comunicación entre objetos es a través de un middleware llamado Object Request Broker (software bus) ej. CORBA
Más complejos de diseñar que los sistemas C/S
Ejemplo:
Service Oriented Architecture (SOA)
Características:
Funcionalidades expuestas como servicios independientes mediante interfaces públicas bien definidas
Procesos del negocio se realizan estableciendo secuencias (coreografías) de invocación de éstas funcionalidades
Implementación con web-services brinda mayor interoperabilidad, utilización de protocolos estándares de comunicación e intercambio de información (SOAP, XML)
Funcionamiento gral.:
Motivación: Costo de un acceso remoto en una red super-rápida es aprox. 4 veces el costo de un acceso local.
Soluciones:
Distribuir los datos en varias máquinas según cercanía a quienes más los acceden, el todo es la suma de las partes.
Replicar los datos en varias máquinas (caso extremo en cada una) de forma que los accesos sean mayormente locales. Se debe mantener consistencia de las copias
Distribución de Datos
Distribución de Procesos
Puede ser estática o dinámica:
Estática: está predefinido donde se ejecutará cada proceso
Dinámica: la distribución de procesos se establece en tiempo de ejecución ? permite migración de procesos
Remote Procedure Call:
Llamada retorno entre módulos en distintas máquinas.
Aspectos a tener en cuenta: pasaje de parámetros (distintos espacios de memoria), manejo de excepciones.
Pasaje de mensajes:
Cada módulo recibe mensajes de otros, los procesa y responde al módulo apropiado.
Aspectos a tener en cuenta: cantidad de mensajes que se pueden recibir.
Ambos paradigmas son iguales en capacidades, uno puede simularse con el otro. RPC inherentemente sincrónico y pasaje de mensajes asincrónico.
Comunicación
8 Heterogéneas y Otras
Combinación de varios de los estilos vistos anteriormente
Distintas formas de realizar esta combinación:
Jerárquicamente: un componente organizado en un estilo puede tener estructura interna desarrollada en otro estilo. Ej. Tubos y filtros y cada filtro con otro estilo.
Mezcla de conectores: un componente puede utilizar distintos estilos de conectores para interactuar con distintas partes del sistema. Ej. un componente accede a un repositorio a través de parte de su interface pero interactúa a través de tubos con otros componentes.
Otras: clasificación no cerrada, pueden haber otros estilos, pueden clasificarse en forma distinta
3. Técnicas y Herramientas
Concurrencia
Interfaz de Usuario
Principios para guiar el Diseño
Modelo de Análisis de Jacobson
Tarjetas CRC
Diagramas UML
Patrones de Diseño
Marcos de trabajo (Frameworks)
Model Driven Development / Architecture (MDD MDA)
Desarrollo basado en componentes
Procesos Concurrentes
Control de Acceso a Recursos Compartidos
Exclusión mutua (Prueba y Bloqueo en una operación indivisible)
Guardián (un demonio que acepta requerimientos si el recurso está disponible)
Monitores (un objeto abstracto que exporta servicios garantizando exclusión)
Tiempo Real
Procesos Concurrentes + tiempo crítico
Según gravedad de no suministrar servicio en el plazo:
Soft operación se degrada si no se cumplen los reqs. de tiempo (ej: central telefónica)
Hard operación es incorrecta si no se cumplen los reqs. de tiempo (ej: central nuclear)
Complejidad en el diseño
Sist. Secuencial tiempo solo
Sist. Concurrente afecta performance
Sist. Tiempo Real
Soft tiempo también
Hard afecta correctitud
Los Sists. de Tiempo Real en gral. interactúan con ambiente externo que produce estímulos en forma autónoma a los cuales el software debe responder en un tiempo límite establecido.
Diseño de la Interfaz de Usuario (1)
Principios generales (Sommerville)
Familiaridad: utilizar términos familiares a los usuarios
Consistencia: menúes y comandos con el mismo formato y significado en toda la aplicación
Mínima sorpresa: misma acción en contextos comparables produzcan un cambio similar
Recuperabilidad: recuperación frente a errores cometidos por el usuario, brindar:
confirmación de acciones destructivas
recursos para deshacer en varios niveles
Guía al usuario: proveer ayuda en varios niveles
Diversidad de usuarios: tener en cuenta distintos tipos de usuarios.
Diseño de la Interfaz de Usuario (2)
Elementos Claves (Pfleeger):
Metáforas: imágenes fundamentales y conceptos
Modelo del método: la organización y representación de la información
Reglas de navegación para el modelo: cómo moverse y el modelo espacial
Apariencia: transmite información y significado para los usuarios
Sensación: la que proporciona experimentar las técnicas de interacción
Color en el diseño de la Interfaz (1)
Lineamientos clave (Shneiderman 1998)
Limitar cantidad de colores utilizados, no más de cuatro o cinco colores distintos por ventana
Utilizar un cambio de color para indicar un cambio en el estado del sistema
Utilizar el código de colores para apoyar tarea de usuarios, por ej. resaltar similitudes o diferencias
Utilizar el código de colores en forma consistente, por ej. desplegar mensajes de error en rojo siempre!
Tener cuidado al combinar colores que puedan producir cansancio en la vista
Color en el diseño de la Interfaz (2)
Elementos culturales
¿Qué color utilizar? ¿Púrpura?
En Inglaterra representa la realeza
En Japón, dignidad y nobleza
En Grecia representaba al diablo y la muerte
Dos pasos para hacer nuestros sistemas multi-culturales
(1) eliminar sesgos o referencias a una cultura específica
(2) ajustar (1) para las culturas que utilizarán el software
Preferencias de Usuario
A ella le gusta, a él no…
No hay una interfaz universal aplicable a todo el mundo
construir un prototipo y evaluarlo con la audiencia objetivo
permitir adaptar la interfaz de usuario
ejemplo: Microsoft Word vs. WordPerfect
Guía para definir la interfaz de usuario
Facilidad de Uso
Alto
Medio
Bajo
Entrada de datos
Reconocimiento Línea de Formu- Pantalla OCR
de Voz Comandos larios sensible optical character
al tacto recognition
Soporte al Usuario
Sistema de ayuda debe proveer:
Mensajes de error
Amables, concisos, consistentes y constructivos, si es posible incluir sugerencia para correción
Ayuda en línea
Páginas web con hipervinculos, ventanas múltiples
Cuidar la estructura de navegación, si es compleja los usuarios se pierden
Documentación de usuario
Incluyendo secciones de: instalación, descripción general, descripción funcional, mensajes de error.
Mensajes de error
Err
or #27
Identificador de paciente no válido
?
El paciente J. Bates no está registrado
Seleccione:
Pacientes para listado de pacientes registrados
Reintentar para reingresar el nombre del paciente
Ayuda para más información
Pacientes
Mensaje orientado al sistema
Mensaje orientado al usuario
Ayuda
Reintentar
Cancelar
Aceptar
Cancelar
Diseño – Principios
Diseño para el Cambio
Separación de Intereses
Modularización (localización del impacto de los cambios)
Niveles de Abstracción (facilita comprensión)
Ocultamiento de Información (encapsular)
Alta Cohesión, Bajo Acoplamiento
Diseño para el cambio
¿Qué puede cambiar?
Algoritmos
requerimientos de desempeño, escala
Representación de los datos
requerimientos de desempeño, escala
cambios en interfaces
equipos externos
ambiente social
Para reducir el impacto de los cambios: Modularizar
Modularización (1)
Módulo: un componente bien definido de un sistema de software que provee recursos y servicios
Están bien definidos:
Recursos y Servicios
La forma de suministrarlos (Interfaces)
Un módulo puede ser un programa o varios, una subrutina o varias
Principio de Separación de Intereses
cada módulo se ocupa de aspectos específicos
Modularización (2)
Definir módulos e interfaces
Interfaces definen el acoplamiento entre módulos
Comportamiento (Pre-Post condiciones) y colaboraciones
Ocultamiento de Información
La información de un módulo debe ser privada a menos que se declare pública, única garantía de que otros módulos no la utilicen ( – impacto de cambios, + fácil de comprender y usar)
Diseño interfaz:¿Qué servicios brindar, qué ocultar?
Mínima, bien definida, independiente de implementación
Alta Cohesión Bajo acoplamiento
Alta cohesión interna de cada módulo (los elementos del módulo están fuertemente relacionados entre sí)
Bajo acoplamiento entre módulos (débiles conexiones entre módulos -impacto reducido de cambios)
Categorías de módulos
Sin persistencia (estado)
Abstracciones de procedimientos (algoritmo)
Bibliotecas (ej. rutinas matemáticas)
Sólo Datos
Repositorio común de datos (ej. Configuración)
Algoritmos + Estado
Objetos abstractos (ej. Stack)
Tipos Abstractos de Datos
paramétrico en tipo (ej. Stack (?) )
Clases (OO)
Criterios para modularizar
Descomposición
Descomponer el problema en sub-problemas (diseño top-down)
Composición
A partir de los componentes es posible obtener un nuevo sistema (diseño bottom-up)
Continuidad del impacto por cambios
Pequeños cambios en la especificación afectan pocos módulos
Protección durante ejecución
Efectos de anomalías durante la ejecución están localizados
Principio Abierto/Cerrado
los módulos debieran ser a la vez abiertos y cerrrados
Abierto para permitir extensiones
Agregar operaciones o atributos para extender el comportamiento
Cambiar representaciones internas e implementaciones en caso necesario
Cerrado para permitir ser usado por otros módulos
La interfaz debe mantenerse cerrada a los cambios y asegurar que se mantiene el comportamiento (pre- y post-condiciones)
Principio de elección única
Cuando un sistema de software debe soportar un conjunto de alternativas, un módulo y sólo uno debe conocer la lista completa de alternativas
Minimiza
Código a escribir
Impacto de cambios en la lista
Reduce la complejidad y por lo tanto facilita comprensión
En general, se debe minimizar la distribución de conocimiento
Modularización – Beneficios
Separar aspectos del diseño
Permitir cambiar algunos sin afectar al resto
Permite
Extender fácilmente artefactos (extensibilidad)
Reusar artefactos existentes (reusabilidad)
Ocultar dependencias de la plataforma (portabilidad)
Diseñar interfaces que se adapten a otras (compatibilidad)
Minimizar impacto de cambios (mantenibilidad)
Facilitar la comprensión
Organizar y distribuir el trabajo
Alta modularización => Alta cohesión Bajo acoplamiento
Cohesión
Coincidente (no relacionados)
Lógica (tipo de función)
Temporal (se usan en el mismo momento)
de Procedimiento (asegurar el orden de ejecución)
de Comunicación (operan sobre o generan los mismos datos)
Secuencial (salida de una parte es entrada de otra)
Funcional (cada parte es esencial para cumplir una función)
de Información (TAD extensión para OO)
Cohesión Coincidente
Poca o ninguna relación entre los elementos de un módulo
Dificulta el mantenimiento
Módulos no reusables
Manifestaciones en el caso de OO
Clase no representa un único concepto OO
Conjunto de código usado frecuentemente como una clase con herencia múltiple
Cohesión Lógica
El módulo cumple varias funciones relacionadas. Al invocar al módulo se debe indicar mediante un parámetro qué función llevar a cabo
Interfaz difícil de entender
El código para más de una función puede entremezclado
Difícil de reusar
Solución:
Aislar cada función en operaciones separadas
Cohesión Temporal
Los elementos del módulo están agrupados porque se usan en el mismo período
No reusable
Ejemplo:
Módulo que concentra la inicialización de valores a objetos
Módulos que se encargan de limpiar al fin de un trabajo
Cohesión de Procedimiento
Los elementos del módulo están agrupados sobre la base de participar en un proceso o algoritmo
Específicos para una aplicación
Difícilmente reusable
En el contexto el módulo es razonable, pero difícil de entender fuera de este
Solución:
Rediseñar
Cohesión de Comunicación
Los elementos del módulo usan y/o generan el mismo conjunto de datos
Difícilmente reusable
Solución:
Aislar cada elemento en módulos separados
Cohesión Funcional
Las operaciones de un módulo se pueden describir colectivamente como una única función
más reusable
Mantenimiento correctivo más fácil
En OO:
Cada operación de la interfaz pública debiera presentar cohesión funcional
Cada objeto debe representar un único concepto cohesivo
Cohesión de Información
Un módulo tiene cohesión de información si cumple varias funciones:
Varios puntos de entrada
Cada entrada desempeña una función específica
Todas las funciones están relacionadas por un concepto, estructura de datos, o recurso que el módulo oculta
Acoplamiento
Acoplamiento por Contenido
modificación de variable interna, ejecución de una porción de procedimiento
Area Común (cualquiera modifica)
De Control (No hay ocultamiento de información)
Parámetro (de entrada o salida) que gobierna ejecución
Estructura de Datos (comparten la estructura)
Datos (lo deseable) mínima
No acoplado
Tarjetas CRC (1)
Clase – el nombre
Responsabilidades – lo que sabe y lo que hace
Collaboraciones – quiénes le ayudan
(Gp:) Clase: Model
(Gp:) Colaboradores:
View
Controller
(Gp:) Responsabilidad:
Proporciona el núcleo de funcionalidad de la aplicación
Registra los View y Controller dependientes
Notifica a los componentes dependientes acerca de cambios en los datos
Tarjetas CRC (2)
Permite una rápida visión de los elementos esenciales de las clases al encarar la descomposición
Se usan como técnica de diseño con participación de usuarios
Cada uno desempeña el rol de una clase
Cada uno describe lo que hace al ejecutar un determinado escenario de cierto caso de uso
Diagramas UML (1)
Paquetes (visión de alto nivel mostrando dependencias)
mecanismo para agrupación de elementos
la dependencia significa que cambios en uno afectan al otro
Subsistemas (visión de paquetes, comportamiento de clases)
agrupación lógica de elementos de diseño, con interface de servicios que brinda (implementados por las clases)
De Interacción (dos visiones distintas de lo mismo)
Secuencia (deja en claro la evolución temporal)
Comunicación (muestra más claramente las interacciones, pero el orden está dado por números)
Clases (relaciones estáticas, operaciones,navegabilidad)
Componentes (dependencias entre componentes)
Despliegue (Deployment del software en el hardware)
Diagramas UML (2)
Paquetes
Elemento de modelado que contiene otros elementos de modelado
como mecanismo de agrupación no tiene semántica definida
puede no tener representación en implementación (si tiene podría ser un directorio)
un paquete es dueño de sus elementos; un elemento pertenece a un solo paquete
el uso de paquetes fuerza a la modularidad
Diagramas UML (3)
Subsistemas
agrupación de elementos donde algunos constituyen la especificación del comportamiento ofrecido por otros elementos contenidos [Booch,1999]
elemento de modelado que tiene semántica package+clase que provee comportamiento
implementa una o más interfaces que definen el comportamiento del subsistema
un subsistema representa un componente en el diseño
el uso de subsistemas fuerza a la modularidad &encapsulación
Diagramas UML (4)
Componentes
describe la organización de los componentes físicos del sistema
un componente es la realización física de una abstracción en el diseño
los componentes corresponden a implementación
ejemplos de componentes son:
.exe, .dll, .java, .class
se pueden estereotipar como: < < source code>>, < < file>>, < < executable>>, entre otros.
Diagramas UML (5)
De Interacción: Secuencia
sobre un conjunto de objetos y sus relaciones, muestra la interacción entre éstos incluyendo los mensajes que intercambian
el orden de los mensajes se muestra en relación al tiempo
cada objeto tiene una línea de vida sobre la cual se muestran los bloques de activación (tiempo que el objeto necesita para completar una tarea)
se pueden modelar mensajes sincrónicos y asincrónicos, loops, entre otros.
Diagramas UML (6)
De Interacción:Comunicación
sobre un conjunto de objetos y sus relaciones, muestra la interacción entre éstos incluyendo los mensajes que intercambian
el orden de los mensajes se muestra numerado
los mensajes se pueden anidar mostrando la anidación con la numeración, se pueden modelar loops.
las asociaciones son las existentes entre los objetos en el diagrama de clases.
Diagramas UML (7)
Clases:
Muestra las clases en el sistema y como se relacionan
Información sobre atributos y tipos correspondientes, operaciones con paramétros y tipos correspondientes, multiplicidad de las asociaciones, agregación, composición, generalización.
Clases que pueden iniciar y controlar flujo de las actividades se recuadran en negritas (por ej. correspondiente a una clase de control para un CU)
Diagramas UML (8)
Deployment o despliegue
muestra los recursos físicos de un sistema incluyendo componentes, nodos y conexiones
presenta la distribución de componentes de software en nodos donde ejecutan, y las asociaciones entre los nodos
asociaciones representan conexiones físicas entre nodos estereotipadas por protocolos de la comunicación, ej. TCP/IP, HTTP.
Patrones de Diseño
Un patrón es una solución a un problema en un contexto (Christopher Alexander) => Reuso y Diseminación
Surgen en la arquitectura (de casas) y los principios se aplicaron exitosamente a OOP.
Nombre del patrón. Hace posible referirse a él.
El problema. Un patrón particular es aplicable a ciertos tipos de problemas. Un aspecto relevante de la definición de un patrón es la descripción de para qué tipos de problemas es útil.
La solución. Un patrón define una solución conceptual particular al problema.
Consecuencias. Las decisiones de implementación implican ciertos compromisos. Las consecuencias de esas decisiones y las fuerzas que están por detrás del patrón son aspectos esenciales de este.
Patrones de Diseño para Sistemas Interactivos
Mecanismos complicados de GUI
Cambios y adaptaciones frecuentes
Múltiples estándares de apariencia
Funcionalidad Compleja
Usualmente permanece relativamente estable
El problema:
mantener la funcionalidad del núcleo independiente de Interfaz de Usuario
Patrones:
Model-View-Controller (MVC)
Presentation-Abstraction-Control (PAC)
Model-View-Controller (MVC)
Model
Núcleo de la Funcionalidad
View
Desplegar la Información
Controller
manejar la entrada de usuario
GUI
Datos del Núcleo
Ejemplo:
MVC – Fuerzas
La misma información se presenta distinto en diferentes ventanas
El despliegue y comportamiento de la aplicación debe reflejar inmediatamente las manipulaciones de los datos
Cambios a la IU debieran ser fáciles y posibles en tiempo de ejecución
Soportar distintos estándares de apariencia o portar la IU no debiera afectar el núcleo de la aplicación
MVC – Clases (1)
(Gp:) Clase: Model
(Gp:) Colaboradores:
View
Controller
(Gp:) Responsabilidad:
Proporciona el núcleo de funcionalidad de la aplicación
Registra los View y Controller dependientes
Notifica a los componentes dependientes acerca de cambios en los datos
Encapsula los datos, proporciona métodos de acceso para las vistas
Controllers invocan los métodos exportados para el procesamiento de la aplicación
El patrón Observer se puede usar para propagar los cambios
MVC – Clases (2)
(Gp:) Clase: View
(Gp:) Colaboradores:
Controller
Model
(Gp:) Responsabilidad:
Crea e inicializa su Controller asociado
Obtiene datos de Model
Despliega información al usuario
Implementa el procedimiento update
Cada View crea un Controller adecuado (uno a uno)
Ofrece interfaces que habilitan a Controller para algunas manipulaciones de despliegue que no afectan el modelo (p.e. scroll)
MVC – Clases (3)
(Gp:) Clase: Controller
(Gp:) Colaboradores:
View
Model
(Gp:) Responsabilidad:
Acepta entradas del usuario como eventos
Traduce eventos en solicitudes de servicio para Model o View
Si se precisa, implementa el procedimiento update
EL procedimiento update se implementa en caso de que el comportamiento de Controller depende del estado de Model (p.e. un cambio del modelo habilita o deshabilita un menú)
Diagrama de Clases
Distintas opciones Cliente/Servidor
Cliente
Servidor
Int.
Usuario
Int.
Usuario
Lógica
Aplic.
DBMS
Int.
Usuario
Lógica
Aplic.
DBMS
Interfaz distribuida
Aplic. Remota
(Gp:) Int.
Usuario
(Gp:) Lógica
Aplic.
Lógica
Aplic.
DBMS
Aplic. distribuida
(Gp:) Int.
Usuario
(Gp:) Lógica
Aplic.
(Gp:) DBMS
(Gp:) DBMS
Int.
Usuario
Lógica
Aplic.
DBMS
DBMS Remoto
DBMS distribuido
Patrones para Distribución
Además, se pueden tener otros niveles…
¿cuál es el costo de cambiar la forma de distribución?
¿cómo incide en el esfuerzo de desarrollo la comunicación entre los componentes?
Problema:
Componentes remotos debieran aparecer como locales
Cliente y Servidores no debieran preocuparse de la comunicación
Solución:
Un sustituto del servicio que permite el acceso local
Proxy
Cliente
(Gp:) Servicio Abstracto
(Gp:) servicio
(Gp:) Servicio
(Gp:) servicio
(Gp:) Proxy
(Gp:) servicio
No es directamente accesible al Cliente
1
1
Proxy representa al Servicio y asegura el acceso a él (misma interfaz)
Proxy diagrama de secuencia
(Gp:) Cliente
(Gp:) Proxy
(Gp:) Servicio
(Gp:) servicio
(Gp:) servicio
(Gp:) Pre-proceso y asignación
(Gp:) Post-proceso y devolución
¿Cuántos proxys precisamos?
Problema:
Muchos servicios pueden ser remotos
Las ubicaciones de estos pueden cambiar
Se deben poder agregar, cambiar y suprimir servicios dinámicamente
Los detalles debieran quedar ocultos para el desarrollador
Broker
(Gp:) Broker
(Gp:) Proxy-Cliente
(Gp:) Servicio_p
(Gp:) Proxy-Servidor
(Gp:) Servicio Abstracto
(Gp:) Call_servicio_p
(Gp:) Servidor
(Gp:) Servicio_i
(Gp:) llama
(Gp:) llama
(Gp:) mensajes
(Gp:) mensajes
Solución:
Un intermediario entre proxys cliente y servidor
Broker – diagrama de secuencia
Marcos de trabajo (Frameworks) (1)
Aplicación reusable, semi-completa que puede ser especializada
Proporciona un esqueleto extensible
Soporta reuso del diseño y del código
Gran parte del esfuerzo y costo proviene de:
Redescubrir y reinventar el diseño de clases básicas y de sus interacciones
Clases de frameworks:
infraestructura de sistemas (ej. interfaces usuario Struts)
integración de middleware (ej. Corba, Com)
aplicaciones empresariales (ej. sists. Financieros)
Marcos de trabajo (Frameworks) (2)
Diferencias con otras bibliotecas de clases:
Principio de inversión del control
Basado en el patrón de diseño template method
Captura las interacciones entre objetos en un template method, postergando algunos pasos (hook methods)
Especificando los hook methods los desarrolladores pueden ajustar las interacciones provistas por el framework
Son los template methods los que invocan a los hook methods => inversión del control
Marcos de trabajo (Frameworks) (3)
biblioteca
aplicación
Framework
Biblioteca de Clases
biblioteca
aplicación
Reescribiendo los hook methodsel desarrollador inserta la personalización
Framework invoca hook methods como parte de su interacción
El desarrollador implementa las clases del núcleo y sus interacciones reusando funcionalidad ya existente
Conjunto de clases con funcionalidad preexistente
Marcos de trabajo (Frameworks) (4)
Problemas:
No existe metodología:
cómo desarrollarlos
Cómo usarlos
Curva de aprendizaje
En general lleva mucho tiempo y esfuerzo aprender a utilizar un marco de forma eficiente. Cuanto más complejo el marco, mayor es la curva de aprendizaje
Model Driven Development/Architecture (MDD – MDA) (1)
Enfoque de desarrollo basado en modelos
brinda significado al uso de modelos
dirigen el curso del: conocimiento, diseño, construcción, distribución, operación, mantenimiento y modificación del sw
MDA es un estándar bastante reciente del OMG (Object Management Group) (versión 1.0.1 junio 2003)
Principales objetivos de MDA
Portabilidad
Interoperabilidad
reusabilidad
Principales conceptos de MDA
Computation Independent Model
(= modelo de dominio)
Platform Independent Model
(funcionalidad y comportamiento del sistema, sin detalles de tecnología)
Platform Specific Model
(mapeo a diversas tecnologías de middleware, generado a partir del PIM, aplicando mapeos standard de la OMG. Código parcialmente autom.)
Model Driven Development/Architecture (MDD – MDA) (2)
(Gp:) CIM
(Gp:) PIM
(Gp:) PSM
Ejemplo de MDA
Modelo conceptual
UNICO
Modelo funcionalidad
y comportamiento
UNICO
PSM
(distintas
plataformas)
y
Deployment
Model Driven Development/Architecture (MDD – MDA) (3)
(Gp:) CIM
(Gp:) PIM
(Gp:) Modelo
Corba
(Gp:) Modelo
Java/EJB
(Gp:) Modelo
XML/SOAP
(Gp:) Otros Modelos
(Gp:) Corba
(Gp:) Java/EJB
(Gp:) XML/SOAP
(Gp:) Otros
Desarrollo basado en componentes (1)
Surgimiento a fines de los 90, originado por el no cumplimiento de las expectativas de reutilización que había prometido el desarrollo OO, debido a:
Clases demasiado detalladas, específicas y ligadas a las aplicaciones
Muchas veces hacía necesario disponer del código fuente => dificultades en comercialización
Visión de componente: proveedor de servicios
Entidad ejecutable e independiente
Publica interfaz de servicios suministrados y las interacciones son a través de ésta
Generalmente también define interfaz de servicios que debe proveer el sistema que lo utiliza
Desarrollo basado en componentes (2)
Distintos niveles de abstracción (Meyer 99)
Funcional: implementa una sola función (ej.matematica)
Agrupamiento casual: colección de entidades relacionadas débilmente (ej. declaraciones de datos, funciones)
Abstracciones de datos: abstracción o clase de datos en OO (crear, modificar, acceder)
Abstracciones de clúster: grupo de clases relacionadas que trabajan conjuntamente (también marcos de trabajo o frameworks)
Abstracciones de sistemas: sistema autocontenido (también COTS)
4. Características de un buen Diseño
Independencia de Componentes
Tratamiento de Anomalías
Prevención de Fallas
Independencia de componentes
Cuanto mayor es la independencia, más fácil es:
La comprensión
Mejorar, extender, adaptar, corregir
Mantenimiento
Medida de independencia (Myers, Constantine)
Cohesión: medida de cuán focalizado está el módulo en una cosa
Acoplamiento: medida de cuán conectado está el módulo con otros y con el ambiente
Se busca alta cohesión y bajo acoplamiento
Identificación y Tratamiento de Anomalías
Diseño defensivo
tratando de anticipar situaciones que podrían llevar a problemas en el sistema
Anomalías incluyen:
imposibilidad de brindar un servicio
proporcionar un servicio o datos incorrectos
corrupción de datos
Tratamiento:
Reintentar: restaurar e intentar nuevamente con estrategia distinta
Corregir: restaurar, corregir algo e intentar de nuevo con misma estrategia
Informar: de la imposibilidad a alguien, restaurar pero no intentar nuevamente
Prevención de Faltas y Tolerancia a Faltas
Tratar de anticipar faltas y manejarlas de forma de minimizar los efectos negativos y maximizar la seguridad
Falta: el error cometido por una persona se traduce en una falta en un producto de software (o productos)
Falla: desvío del sistema del comportamiento requerido
No toda falta produce una falla, las condiciones para que una falta resulte en falla pueden no producirse nunca
Prevenir o tolerar faltas para evitar fallas, construyendo el sistema para que reaccione de manera aceptable
Técnicas para evitar fallas (1)
Detección activa de faltas (antes de ser falla)
Periódicamente verificar síntomas de faltas, anticipar si van a ocurrir:
control de totales, dígitos verificadores (redundancia)
Sospecha mutua: cada componente verifica sus entradas, supone que los demás tienen defectos
Procesos independientes sincronizados: arquitectura especial, realizan en paralelo el mismo trabajo y comparan resultados continuamente
Ejecutar n versiones distintas del programa:
diseño y construcción independiente
con mecanismos de votación para decidir acción siguiente
Técnicas para evitar fallas (2)
Respuesta a la Falta Detectada:
Dependiendo de la criticidad del sistema, falta, requerimientos de disponibilidad, mantenibilidad, se puede:
Detener el sistema (más fácil determinar causa)
Registrar y continuar a partir de un estado seguro
reparar el daño causado por la falta
cambiar el sistema para eliminar la falta
Tolerancia a Faltas:
aislamiento del daño causado por la falta
prevenir que la falta se convierta en falla
basada en la predicción de las ubicaciones de las faltas y definición de caminos alternativos de operación
5. Técnicas para Mejorar el Diseño
Reducir Complejidad
Diseño por Contrato
Prototipado del Diseño
Análisis de Arbol de Faltas
Reducir Complejidad (1)
10
9
8
7
6
5
4
3
2
1
20
25
30
35
Complejidad del Diseño del Sistema
Faltas por mil lineas de código
Reducir Complejidad (2)
Generalidad de la solución
con menos componentes más simples resolver el problema
nivel de abstracción
Adaptabilidad de la solución
cubrir con una solución distintos problemas particulares
Diseño por Contrato (B.Meyer)
interacción entre componentes basada en contrato entre un cliente de un servicio y un proveedor del mismo
contrato define:
obligaciones del cliente-requisitos del servidor (precondiciones)
beneficios cliente-compromiso servidor (post-condiciones)
si un servidor recibe un requerimiento que no cumple las precondiciones, no está obligado a nada
podría abortar la ejecución, entrar en ciclo sin fin, etc.
internamente cada componente tendrá ciertas restricciones de consistencia (invariantes)
tratamiento de excepciones
si un servidor no puede cumplir un servicio, debe levantar una excepción (la que debe ser tratada por el cliente)
Prototipado de Diseño
Brooks (1975) recomienda construir un sistema, tirarlo y construirlo de nuevo para aprovechar en el segundo el aprendizaje de los errores cometidos al construir el primero
Construir una parte del sistema para evaluar factibilidad /riesgos
prototipo desechable
evolutivo
herramientas RAD (Rapid Application Development)
Mejora la comunicación en el grupo y con el cliente
Análisis del Arbol de Faltas
Ayudan a descomponer el diseño para identificar situaciones que podrían generar una falla
árbol lógico desde el efecto a las posibles causas
and
Modo llenado activo
Sistema de enfriamiento
desbordado
or
falla
Válvula
abierta
trancada
Pueden
ocurrir
ambos
Timeout
falla
Falla
Sensor
Deben
ocurrir
ambos
Evento
básico
Análisis del Arbol de Faltas
G3
G1
G2
G4
G5
A1
A2
A3
A4
A5
G1
G2
G3
{G4,G5}
{A4,A5}
{A1,G5}
{A2,G5}
{A1,A3}
{A1,A4}
{A2,A3}
{A2,A4}
Conjunto de Corte
Arbol de Faltas
6. Validación del diseño
Evaluación y validación del diseño
Técnicas para validar y verificar
Evaluación y Validación del Diseño
Validación: asegurar que el diseño satisface todos los requerimientos
Verificación: asegurar que incorpora características de un buen diseño
Técnicas para Validar y Verificar
Validación Matemática
Medir la Calidad del Diseño
Comparar Diseños
Una Especificación, Varios Diseños
Tablas Comparativas
Revisiones de Diseño
Preliminar
Crítica
De Programas
Validación Matemática
Prueba que el diseño es correcto
Demostrando que:
Si el conjunto de entradas se formula correctamente, es transformada correctamente en las salidas esperadas
El proceso termina sin fallar.
Medir la Calidad del Diseño
Medir el diseño de alto nivel, incluyendo cohesión y acoplamiento
Medir la complejidad de cada componente y de la relación entre componentes
Comparar Diseños
Una Especificación, Varios Diseños
Generar varios diseños para la misma especificación basados en diferentes estilos de arquitectura
Decidir cuál es el más adecuado para el propósito del sistema
Tablas Comparativa (ejemplo):
Facilidad para cambiar algoritmos
Facilidad para cambiar la representación de los datos
Facilidad para cambiar las funciones
Desempeño (tiempo de respuesta)
Facilidad de reuso
Revisiones de Diseño
¿Para qué?
Cuanto antes encontremos un problema, en menos lugares deberemos buscar la causa y corregirla.
Hacer todas las preguntas para asegurar que el diseño cubre todo lo necesario (listas de comprobación)
Preparación
Definir Participantes
deben saber qué se espera de ellos y recibir la documentación con antelación (posiblemente con breve charla)
Roles especiales:
Moderador: para que la reunión sea productiva
Secretario: para registrar los problemas y de las acciones a tomar
Acciones posteriores (Verificar que se cumplan)
Revisiones de Diseño
RD Preliminar (Al definir la Arquitectura)
cliente, usuario
analistas, diseñador sistema, otros no involucrados
moderador, secretario
RD Crítica (Técnica, previa al diseño detallado)
analistas, diseñador sistema, otros no involucrados
Diseñadores de programas
moderador, secretario
RD de Programas (Técnica, previa a la codificación)
analistas, diseñador sistema, otros no involucrados
Diseñadores de programas
Programadores
moderador, secretario
7. Documentando el Diseño
Un producto importante del proceso de Diseño es un conjunto de documentos que describen el sistema a construir.
Referencia Cruzada a los Requerimientos
Es la solución del problema
Página anterior | Volver al principio del trabajo | Página siguiente |